import JSEncrypt from 'jsencrypt'

const PUBLIC_KEY  = `MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCuQd3gESx7VdIyRYUWjmjg61VIgUK6F45hClmqUMZ7xNiT5rlLM6e78osMvBF/yP7cVm7pK+NMCDWoVS1/AETpxJYqUlIC77ZAU8/MnP96IupnJL87vqhPcpdv7+VqLM38ls++yuD/F/HSoOQTv/leJh+dgE/4EYAJjOWFAbYfXwIDAQAB`;

// 创建加密实例
const encryptor = new JSEncrypt()
encryptor.setPublicKey(PUBLIC_KEY)


/**
 * RSA加密方法
 * @param {string} data 要加密的数据
 * @returns {string} 加密后的字符串
 */
export function rsaEncrypt(data) {
  try {
    // 确保数据是字符串
    const dataStr = typeof data === 'string' ? data : JSON.stringify(data)
    return encryptor.encrypt(dataStr)
  } catch (error) {
    console.error('加密失败:', error)
    throw new Error('数据加密失败')
  }
}

/**
 * 加密对象的所有字段（适用于表单加密）
 * @param {object} obj 要加密的对象
 * @returns {object} 加密后的对象
 */
export function encryptObject(obj) {
  if (!obj || typeof obj !== 'object') return obj
  
  const encryptedObj = {}
  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      encryptedObj[key] = rsaEncrypt(obj[key])
    }
  }
  return encryptedObj
}